home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Disc to the Future 2
/
Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin
/
MAC
/
THINKC
/
5
/
MAZE__
/
CMAZEAPP.C
< prev
next >
Wrap
Text File
|
1991-12-29
|
9KB
|
328 lines
/*****
* CMazeApp.c
*
* Application methods for a typical application.
*
* Copyright ⌐ 1990 Symantec Corporation. All rights reserved.
*
*****/
#include "CMazeApp.h"
#include "CMazeDoc.h"
#include "CDialogDirector.h"
#include "CDLOGDirector.h"
#include "CDLOGDialog.h"
#include "CDialog.h"
#include "CDialogText.h"
#include "CBartender.h"
#include "Commands.h"
#include "CApplication.h"
#include "CDesktop.h"
#include "TCLUtilities.h"
#include "CDecorator.h"
extern OSType gSignature;
#define kExtraMasters 8
#define kRainyDayFund 20480
#define kCriticalBalance 20480
#define kToolboxBalance 20480
#define kAboutDLOG 130
extern CDesktop *gDesktop; /* The enclosure for all windows */
CDLOGDirector *aboutDialogDirector;
CDLOGDialog *aboutDialog;
/***
* IMazeApp
*
* Initialize the application. Your initialization method should
* at least call the inherited method. If your application class
* defines its own instance variables or global variables, this
* is a good place to initialize them.
*
***/
void CMazeApp::IMazeApp(void)
{
CApplication::IApplication( kExtraMasters, kRainyDayFund,
kCriticalBalance, kToolboxBalance);
/* The parameters to IApplication are the number of times to call
MoreMasters, the total number of bytes of heap space to reserve for
monitoring low memory situations, and the portion of the memory
reserve to set aside for critical operations and toolbox calls.
Four (4) is a reasonable number of MoreMasters calls,
but you should determine a good number for your application
by observing the heap using Lightsbug,
TMON, or Macsbug. Set this parameter to zero, give your
program a rigorous work-out, then look at the heap and count
how many master pointer blocks have been allocated. Master
pointer blocks are nonrelocatable and have a size of $100
(hex). You should call MoreMasters at least this many
times -- add a few extra just to be safe. The purpose of all
this preflighting is to prevent heap fragmentation. You
don't want the Memory Manager to call MoreMasters and
create a nonrelocatable block in the middle of your heap. By
calling MoreMasters at the very beginning of the program,
you ensure that these blocks are allocated in a group at the
bottom of the heap.
The memory reserve is a safeguard for handling low memory
conditions and is used by the GrowMemory method in
CApplication (check there for more comments). In general,
your program should never request a memory block greater
than this reserve size without explicitly checking in
advance whether there is enough free memory to satisfy the
the request.
*/
}
/***
* SetUpFileParameters
*
* In this routine, you specify the kinds of files your
* application opens.
*
*
***/
void CMazeApp::SetUpFileParameters(void)
{
inherited::SetUpFileParameters(); /* Be sure to call the default method */
/**
** sfNumTypes is the number of file types
** your application knows about.
** sfFileTypes[] is an array of file types.
** You can define up to 4 file types in
** sfFileTypes[].
**
**/
sfNumTypes = 1;
sfFileTypes[0] = 'MAZE';
/**
** Although it's not an instance variable,
** this method is a good place to set the
** gSignature global variable. Set this global
** to your application's signature. You'll use it
** to create a file (see CFile::CreateNew()).
**
**/
gSignature = 'MAZE';
}
/***
* SetUpMenus
*
* Set up menus which must be created at run time, such as a
* Font menu. You can eliminate this method if your application
* does not have any such menus.
*
***/
void CMazeApp::SetUpMenus()
{
inherited::SetUpMenus(); /* Superclass takes care of adding
menus specified in a MBAR id = 1
resource
*/
/* Add your code for creating run-time menus here */
}
/***
* DoCommand
*
* Your application will probably handle its own commands.
* Remember, the command numbers from 1-1023 are reserved.
* The file Commands.h contains all the predefined TCL
* commands.
*
* Be sure to call the default method, so you can get
* the default behvior for standard commands.
*
***/
void CMazeApp::DoCommand(long theCommand)
{
CDLOGDirector *aboutDialogDirector;
CDLOGDialog *aboutDialog;
switch (theCommand) {
case cmdAbout:
aboutDialogDirector = new( CDLOGDirector);
aboutDialogDirector->IDLOGDirector(kAboutDLOG, this);
aboutDialog = new(CDLOGDialog);
aboutDialog->IDLOGDialog(kAboutDLOG, gDesktop,
aboutDialogDirector);
aboutDialog->Show();
aboutDialog->Select();
break;
default: inherited::DoCommand(theCommand);
break;
}
}
/***
*
* UpdateMenus
*
* Perform menu management tasks
*
***/
void CMazeApp::UpdateMenus()
{
inherited::UpdateMenus(); /* Enable standard commands */
}
/***
* Exit
*
* Chances are you won't need this method.
* This is the last chance your application gets to clean up
* things like temporary files before terminating.
*
***/
void CMazeApp::Exit()
{
/* your exit handler here */
}
/***
* CreateDocument
*
* The user chose New from the File menu.
* In this method, you need to create a document and send it
* a NewFile() message.
*
***/
void CMazeApp::CreateDocument()
{
CMazeDoc *theDocument = NULL;
TRY
{
theDocument = new(CMazeDoc);
/**
** Send your document an initialization
** message. The first argument is the
** supervisor (the application). The second
** argument is TRUE if the document is printable.
**
**/
theDocument->IMazeDoc(this, TRUE);
/**
** Send the document a NewFile() message.
** The document will open a window, and
** set up the heart of the application.
**
**/
theDocument->NewFile();
}
CATCH
{
/*
* This exception handler gets executed if a failure occurred
* anywhere within the scope of the TRY block above. Since
* this indicates that a new doc could not be created, we
* check if an object had been allocated and if it has, send
* it a Dispose message. The exception will propagate up to
* CSwitchboard's exception handler, which handles displaying
* an error alert.
*/
if (theDocument) theDocument->Dispose();
}
ENDTRY;
}
/***
* OpenDocument
*
* The user chose Open╔ from the File menu.
* In this method you need to create a document
* and send it an OpenFile() message.
*
* The macSFReply is a good SFReply record that contains
* the name and vRefNum of the file the user chose to
* open.
*
***/
void CMazeApp::OpenDocument(SFReply *macSFReply)
{
CMazeDoc *theDocument = NULL;
TRY
{
theDocument = new(CMazeDoc);
/**
** Send your document an initialization
** message. The first argument is the
** supervisor (the application). The second
** argument is TRUE if the document is printable.
**
**/
theDocument->IMazeDoc(this, TRUE);
/**
** Send the document an OpenFile() message.
** The document will open a window, open
** the file specified in the macSFReply record,
** and display it in its window.
**
**/
theDocument->OpenFile(macSFReply);
}
CATCH
{
/*
* This exception handler gets executed if a failure occurred
* anywhere within the scope of the TRY block above. Since
* this indicates that the document could not be opened, we
* send it a Dispose message. The exception will propagate up to
* CSwitchboard's exception handler, which handles displaying
* an error alert.
*/
if (theDocument) theDocument->Dispose();
}
ENDTRY;
}